import axios from "axios";
//请求进度条

//创建axios实例
const request = axios.create({
  baseURL: "http://localhost:3000",
});
const errObj = {
  401: "没有权限",
  403: "资源禁止访问",
  404: "资源不存在",
  407: "token失效",
  500: "服务器出错",
};
//请求拦截 用于设置传输一些公共参数 如token
request.interceptors.request.use((config) => {

  // token = store.state.user.token  从vuex中取值
  const token = JSON.parse(localStorage.getItem('user') as string)?.token//
  if(token){//token有值再请求头携带token参数
    config.headers.token = token
  }
  return config;
});
//响应拦截 提前处理需要返回的数据和请求失败、功能失败的用户提示
request.interceptors.response.use(
  //成功回调
  (res) => {
   
    // console.log(res.data);
    if (res.data.code === 200) {
      //功能ok 返回数据data
      return res.data.data;
    } else {
      //功能ng
      alert(res.data.message);
      //需返回一个失败的promise
      return Promise.reject();
    }
  },
  //失败的回调
  (err) => {
    //结束
   
    console.log(err);
    //通过有无response可以区分超时 无网
    if (err.response) {
      alert("未知错误");
      if(err.response.status===407){
        // store.commit('RESET')//token失效 重置token
        localStorage.removeItem('user')
        location.reload() //重新加载
      }
    } else {
      if (err.message.indexOf("timeout") !== -1) {
        alert("请求超时");
      } else if (err.message.indexOf("Network") !== -1) {
        alert("网络异常");
      } else {
        alert("未知错误");
      }
    }
    //返回一个失败的承诺
    return Promise.reject();
  }
);

export default request;
